package william.string;

/**
 * @author ZhangShenao
 * @date 2024/2/22
 * @description <a href="https://leetcode.cn/problems/add-strings/description/">...</a>
 */
public class Leetcode415_字符串相加 {
    /**
     * 从低位开始,将两个字符串逐位相加,并记录加和与进位
     */
    public String addStrings(String num1, String num2) {
        //边界条件校验
        if (num1 == null || num1.isEmpty()) {
            return num2;
        }
        if (num2 == null || num2.isEmpty()) {
            return num1;
        }

        StringBuilder result = new StringBuilder();
        int carry = 0;

        //从低位开始,将两个字符串逐位相加
        for (int i = num1.length() - 1, j = num2.length() - 1; i >= 0 || j >= 0; i--, j--) {
            int x = i < 0 ? 0 : num1.charAt(i) - '0';
            int y = j < 0 ? 0 : num2.charAt(j) - '0';
            int sum = x + y + carry;
            result.append(sum % 10); //记录加和
            carry = sum / 10;   //记录进位
        }

        //处理最后的进位
        if (carry > 0) {
            result.append(carry);
        }

        //返回结果
        return result.reverse().toString();
    }
}
